/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucuenca.paginaasos.uimanager;

import edu.ucuenca.paginaasos.controller.GenericController;
import edu.ucuenca.paginaasos.controller.exceptions.NonexistentEntityException;
import edu.ucuenca.paginaasos.controller.exceptions.RollbackFailureException;
import edu.ucuenca.paginaasos.entity.Comentario;
import edu.ucuenca.paginaasos.entity.Foro;
import edu.ucuenca.paginaasos.entity.Usuario;
import edu.ucuenca.paginaasos.uimanager.util.JsfUtil;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.transaction.UserTransaction;
import org.primefaces.event.TabChangeEvent;
import org.primefaces.event.TabCloseEvent;

/**
 *
 * @author Johnny
 */
@ManagedBean(name = "gestorNoticias")
@ViewScoped
public class GestorNoticias implements Serializable {

    /**
     * Creates a new instance of GestorNoticias
     */
    private Foro foro;
    private String titulo;
    private int privacidad;
    private String descripcion;
    private String ext;
    @Resource
    private UserTransaction utx = null;
    @PersistenceUnit(unitName = "paginaasospu")
    private EntityManagerFactory emf = null;
    private GenericController<Foro> controladorForo;
    private GenericController<Comentario> controladorComentarios;
    
    InputStream archivo;
    private List<Foro> listaNoticias;
    private Foro noticiaSel;
    private int tipo;
    private List<Comentario> listaComentarios;
    private Usuario usuario;
    private GenericController<Foro> getControladorForo() {
        if (controladorForo == null) {
            controladorForo = new GenericController<Foro>();
        }
        return controladorForo;
    }
    public boolean getEstaLogeado(){
        return usuario!=null && usuario.getTipo().equals(Usuario.TipoUsuario.ADMIN);
    }
    private GenericController<Comentario> getControladorComentarios() {
        if (controladorComentarios == null) {
            controladorComentarios = new GenericController<Comentario>();
        }
        return controladorComentarios;
    }
    @PostConstruct
    public void init(){
        usuario=GestorUsuario.getInstance().getUsuarioActual();
        if(usuario==null){
            vuelveAIndex();
        }
    }
    public GestorNoticias() {
    }
    private String vuelveAIndex()
    {
        return "index";
    }
    public Foro getForo() {
        return foro;
    }

    public void setForo(Foro foro) {
        this.foro = foro;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public int getPrivacidad() {
        return privacidad;
    }

    public void setPrivacidad(int privacidad) {
        this.privacidad = privacidad;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public InputStream getArchivo() {
        return archivo;
    }

    public int getTipo() {
        return tipo;
    }

    public void setTipo(int tipo) {
        this.tipo = tipo;
    }
    
    public void setArchivo(InputStream archivo) {
        this.archivo = archivo;
    }

    public List<Foro> getListaNoticias() {
        if (listaNoticias == null && usuario!=null) {
            listaNoticias = getControladorForo().findWhere(new Foro(), "(tipo=0 or tipo=1) and estado=0 and idEscuela="+usuario.getPersona().getEscuela().getId());
        }
        return listaNoticias;
    }

    public void setListaNoticias(List<Foro> listaNoticias) {
        this.listaNoticias = listaNoticias;
    }

    public String nuevaNoticia() {
        return "FrmCrearNoticia?faces-redirect=true";
    }

    public void modificaNoticia(Foro noticia) {
        setNoticiaSel(noticia);
        getNoticiaSel().getId();
    }

    public Foro getNoticiaSel() {
        if (noticiaSel == null) {
            noticiaSel = new Foro();
            noticiaSel.setNombre("noticia");
            noticiaSel.setDescripcion("descripcion");
            noticiaSel.setImagen("imagen");
        }
        return noticiaSel;
    }

    public void setNoticiaSel(Foro noticiaSel) {
        this.noticiaSel = noticiaSel;
    }

    public void modificarNoticia() {
        try {
            new GenericController<Foro>().edit(noticiaSel);

            JsfUtil.addSuccessMessage("Noticia modificada Correctamente");
        } catch (Exception ex) {
            JsfUtil.addErrorMessage("Error al actualizar la noticia");
        }
    }

    public void eliminarNoticia(Foro noticia) {
        try {
            noticia.setEstado(1);
            new GenericController<Foro>().edit(noticia);
            listaNoticias.remove(noticia);
            JsfUtil.addSuccessMessage("Noticia eliminada Correctamente");
        } catch (Exception ex) {
            JsfUtil.addErrorMessage("Error al eliminar la noticia");
        }
    }
    public String getImagen(Foro noticia)
    {
        if(noticia.getImagen().equals("")){
            return "/resources/images/no-image.png";
        }else{
            return noticia.getImagen();
        }
    }
     public void onTabChange(TabChangeEvent event) {  
        String id=event.getTab().getId();
       String tab=event.getTab().getTitle();  
        int idNot=Integer.parseInt(tab.split(":")[0]);
        listaComentarios=getControladorComentarios().findWhere(new Comentario(), "estado!=2 and idForo="+idNot);
       
    }  
  
    public void onTabClose(TabCloseEvent event) {  
        FacesMessage msg = new FacesMessage("Tab Closed", "Closed tab: " + event.getTab().getTitle());  
  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }
    public String getIdAsString(Foro noticia)
    {
        return "id:"+noticia.getId();
    }

    public List<Comentario> getListaComentarios() {
        if(listaComentarios==null)
            listaComentarios= new ArrayList<Comentario>();
        return listaComentarios;
    }

    public void setListaComentarios(List<Comentario> listaComentarios) {
        this.listaComentarios = listaComentarios;
    }
    
    public void borrarComentario(Comentario comentario)
    {
        comentario.setEstado(2);
        comentario.setEmail("asd");
        try {
        //    getControladorComentarios().edit(comentario);
            listaComentarios.remove(comentario);
            new GenericController<Comentario>().edit(comentario);
        
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(GestorNoticias.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RollbackFailureException ex) {
            Logger.getLogger(GestorNoticias.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(GestorNoticias.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    
    
}
